package com.example.bookreader1130_1203.Utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.charset.Charset;

public class ProcessText {

    public long pages ;//总页数
    public  final  int SiZE =3000 ; //每页的字节数 字节数 固定
    public long bytescount ;// 字节总数
    public  long currentpage ; //当前页面
    public RandomAccessFile readFile ;
    //int 上限      下限
    /*构造方法 传入当前页 为了 实现书签的功能   记录用户读取的文章位置*/
    public ProcessText(File file ,long currentpage) {
        try {
            readFile =new RandomAccessFile(file ,"r") ;/*"r"只读 */
            bytescount =readFile.length();
            pages=bytescount/SiZE+1;//页面总数=总字数除以每页数
            this .currentpage=currentpage ; //计算得出文本的页数
        } catch (IOException e) {
            e.printStackTrace();
        }

    }




    private  void seek(long page){  /*  seek  寻找定位*/
        try {
            readFile.seek(page*SiZE);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //固定 读取 SIZE +8 个字节 的内容  为什么 +8 ？
    //读取的为字节 需要进行 转码  不可能刚好 转的就是文本内容
    //一页  的末尾  和开始可能出现乱码 每一次 多读 30个字节  是为了 第一页  乱码的位置

    //在第二页  就可以 正常 显示  内容 不影响  阅读

    private String read(){
        //内容重叠 防止 末尾 字节乱码
        byte []  buffer =new byte[SiZE+8] ;/* SIZE解决内容丢失的问题*/
        try {
            readFile.read(buffer);
        } catch (IOException e) {
            e.printStackTrace();
        }

        String str =new String(buffer, Charset.forName("utf-8")) ;
        /*把buff用utf-8的格式转化成String */
        str =str .replace("�","");
        //只要有问号 � ， 就把她删除

        return str ;
    }

    //上一页功能的实现
    public  String getPre(){   /* 在第一页，点上一页，还是在第一页*/
        String content ="";
        if(currentpage<=1 ){
            seek(0);
            content=read() ;
            currentpage=1 ;

        }else {
            seek(currentpage-2);
            content=read() ;
            currentpage--; //递减 自身减一
        }
        return content ;
    }
    //下一页的实现
    public  String getNext (){   /*获取下一页*/
        String content ="";
        if ( currentpage>pages){
            seek(pages-1);
            content=read();
        }else {
            seek(currentpage);
            content=read() ;
            currentpage++;
        }
        return content ;
    }

}